package cn.tedu.course.base.util;

import java.security.SecureRandom;

/** 密码工具类，提供生成随机密码的功能 */
public class PasswordUtil {
    // 定义允许出现在密码中的字符集合 大小写字母 数字 特殊字符
    private static final String ALLOWED_CHARS =
            "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%&*.-_=+";
    // 创建一个安全随机数生成器，用于生成随机密码
    private static final SecureRandom random = new SecureRandom();

    /**
     * 生成指定长度的随机密码
     *
     * @param length 密码的长度，必须大于等于5
     * @return 生成的随机密码字符串
     * @throws IllegalArgumentException 如果指定的密码长度小于5
     */
    public static String generateRandomPassword(int length) {
        // 检查密码长度是否合法，如果不合法则抛出异常
        if (length < 5) throw new IllegalArgumentException("密码长度必须大于等于5");
        // 创建一个字符串构建器，用于拼接生成的密码
        StringBuilder password = new StringBuilder(length);
        // 循环指定次数，每次随机选择一个字符添加到密码中
        for (int i = 0; i < length; i++) {
            // 1. random.nextInt(ALLOWED_CHARS.length()) 生成一个 [0,字符集长度)之间的随机数
            // 2. ALLOWED_CHARS.charAt(...)根据上面的随机数充当下标获取对应的随机字符
            // 3. password.append(...)将该字符追加到密码字符串中
            password.append(ALLOWED_CHARS.charAt(random.nextInt(ALLOWED_CHARS.length())));
        }
        // 将生成的密码转换为字符串并返回
        return password.toString();
    }
}